package persistencia.dao;

import java.util.List;

import org.hibernate.Query;
import persistencia.hbt.HibernateUtil;
import bean.Cliente;
import bean.DescuentoPorCantidad;
import bean.EntidadPersistente;

@SuppressWarnings("unchecked")
public class ClienteDAO extends EntidadPersistenteDAO {
	private static ClienteDAO instancia = null;
	
	public static ClienteDAO getInstancia(){
		if(instancia == null)
			instancia = new ClienteDAO();
		
		if (session == null)
			session = HibernateUtil.getSession();
		
		return instancia;
	}
	
	public Cliente buscar(EntidadPersistente entidad)
	{
		Cliente cli = (Cliente) entidad;
		
		if (cli.getId() != null)
			return (Cliente) super.buscar(cli);
		else if (cli.getCuit() != null)
			return this.buscar(cli.getCuit());
		
		return null;
	}
	
	public DescuentoPorCantidad buscarDescuentoPorCantidadParaCliente(Cliente cliente, int cantidad)
	{
		Query query = session.createQuery("select d from Cliente c, DescuentoPorCantidad d " +
				" where c = :cli and d in elements(c.descuentos) " +
				" and d.cantidadMinima <= :cantidad order by d.cantidadMinima desc ");
		query.setEntity("cli", cliente);
		query.setInteger("cantidad", cantidad);
		
		List<DescuentoPorCantidad> listaDescuentos = query.list();
		
		if (listaDescuentos.size() > 0)
			return listaDescuentos.get(0);
		else
			return null;
	}
	
	private Cliente buscar(String cuit){
		Query query = session.createQuery("from Cliente p where p.cuit = :var");
		query.setString("var", cuit);
		Cliente cli = (Cliente) query.setFirstResult(0).setMaxResults(1).uniqueResult();
		return cli;
	}
}
